package com.tlight.repositorio;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.tlight.hibernateUtil.HibernateUtil;
import com.tlight.interfaces.IRepositorioDependente;
import com.tlight.modelos.Dependente;

public class RepositorioDependente implements IRepositorioDependente {

	Session sessao = null;
	Transaction tx = null;

	@Override
	public void salvarDependente(Dependente a) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		sessao.save(a);
		tx.commit();
		sessao.clear();
	}

	@Override
	public void removerDependente(Dependente a) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		sessao.delete(a);
		tx.commit();
		sessao.clear();
	}

	@Override
	public void atualizarDependente(Dependente a) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		sessao.update(a);
		tx.commit();
		sessao.clear();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Dependente> listaTodosDependente() {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		List<Dependente> la = null;
		Criteria todos = sessao.createCriteria(Dependente.class);
		la = todos.list();
		return la;
	}

	@Override
	public Dependente procurarIdDependente(long id) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao.createQuery("FROM Dependente WHERE id =:ID");
		selecao.setLong("ID", id);
		Dependente a = (Dependente) selecao.uniqueResult();
		return a;
	}

	@Override
	public Dependente procurarNomeDependente (String nome) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao.createQuery("FROM Dependente WHERE nome =:NOME");
		selecao.setString("NOME", nome);
		Dependente a = (Dependente) selecao.uniqueResult();
		return a;
	}

	@Override
	public Dependente prucurarSerie(int serie) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao
				.createQuery("FROM Dependente WHERE serie =:SERIE");
		selecao.setInteger("SERIE", serie);
		Dependente a = (Dependente) selecao.uniqueResult();
		return a;
	}

	@Override
	public Dependente procurarTurma(String turma) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao
				.createQuery("FROM Dependente WHERE turma =:TURMA");
		selecao.setString("TURMA", turma);
		Dependente a = (Dependente) selecao.uniqueResult();
		return a;
	}

	@Override
	public Dependente procurarTurna(String turno) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao
				.createQuery("FROM Dependente WHERE turno =:TURNO");
		selecao.setString("TURNO", turno);
		Dependente a = (Dependente) selecao.uniqueResult();
		return a;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Dependente> prucurarResponsavel(long idResponsavel) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao
				.createQuery("FROM Dependente WHERE responsavel =:idResponsavel");
		selecao.setLong("idResponsavel", idResponsavel);
		List<Dependente> a = (List<Dependente>) selecao.list();
		return a;
	}

}
